iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
Odoo

Odoo 14 Javascript 開發心路歷程系列 第 22

Day 22 實作 10: 建立 action client view - 增加事件(上)

  • 分享至 

  • xImage
  •  

今天來完成事件的目標,但一天處理不完,會分成 2 天來敘述

  • [ ] 增加事件
    • [ ] 新增
    • [ ] 編輯
    • [ ] 刪除項目
    • [ ] 標記完成

首先先來處理 標記完成 的部分,這個最簡單

todo_list.py 增加一個函式

def toggle_finish(self):
    self.finished = not self.finished

    return self.finished

接著在 action_view.jsIronmanActionView 裡增加 events 屬性

增加對應的事件與函式

events: {
    'change .finished': '_toggleFinish',
},

// ...

_toggleFinish: function (ev) {
    let target = ev.currentTarget,
        index = target.dataset.index;

    if (!index) {
        return true;
    }

    let data = this.todoList.at(parseInt(index));

    this._rpc({
        model: 'todo.list',
        method: 'toggle_finish',
        args: [[data.id]]
    }).then(result => {
        target.checked = !!result;
    });

    return true;
},

接著處理 刪除項目

因後端已經有先定義好 unlink 了,所以這裡只要加入事件就好

先在 events 增加一行

'click i.fa-times': '_removeItem',

接著增加函式

_removeItem: function (ev) {
    const self = this;
    let target = ev.currentTarget,
        data_index = target.dataset.index;

    if (!data_index) {
        return true;
    }
    let index = parseInt(data_index);

    let data = this.todoList.at(index);

    if (!data) {
        return true;
    }

    this._rpc({
        model: 'todo.list',
        method: 'unlink',
        args: [[data.id]]
    }).then(result => {
        if (result) {
            self.todoList.splice(index, 1);
            self.renderElement();
        }
    });
},

重新整理網頁後,各位可以測試一下點後面的 x 有沒有動靜

是不是發現沒有動作,但記錄已經刪除了

而 action view 也不是 _render() ,是 renderElement()

為什麼呢?

請容許筆者混個一天賣個關子,明天帶各位看一下底層

回到問題,我們改一下 action view 的屬性名稱

template 改成 contentTemplate

完成後重新整理網頁,在嘗試看看是否刪除後畫面會有變化


上一篇
Day 21 RPC 介紹 - 底層基本面講述
下一篇
Day 23 Action client view 的 renderElement() - 底層基本面講述
系列文
Odoo 14 Javascript 開發心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言